ZQuest Classic Coverage Report


Directory: src/
File: src/gui/builder.h
Date: 2025-05-14 03:25:00
Exec Total Coverage
Lines: 0 303 0.0%
Functions: 0 13387 0.0%
Branches: 0 5280 0.0%

Line Branch Exec Source
1 #ifndef ZC_GUI_BUILDER_HPP
2 #define ZC_GUI_BUILDER_HPP
3
4 #include "gui/use_size.h"
5 #include "gui/button.h"
6 #include "gui/checkbox.h"
7 #include "gui/checkbox_qr.h"
8 #include "gui/colorsel.h"
9 #include "gui/common.h"
10 #include "gui/ditherprev.h"
11 #include "gui/drop_down_list.h"
12 #include "gui/frame.h"
13 #include "gui/grid.h"
14 #include "gui/key.h"
15 #include "gui/label.h"
16 #include "gui/qrpanel.h"
17 #include "gui/ddpanel.h"
18 #include "gui/radio.h"
19 #include "gui/radioset.h"
20 #include "gui/size.h"
21 #include "gui/slider.h"
22 #include "gui/switcher.h"
23 #include "gui/tabpanel.h"
24 #include "gui/tabref.h"
25 #include "gui/list.h"
26 #include "gui/scrolling_pane.h"
27 #include "gui/text_field.h"
28 #include "gui/window.h"
29 #include "gui/widget.h"
30
31 #ifdef IS_EDITOR
32 #include "zq/gui/seltile_swatch.h"
33 #include "zq/gui/selcombo_swatch.h"
34 #include "zq/gui/tileanim_frame.h"
35 #include "zq/gui/msgstr_preview.h"
36 #include "zq/gui/palette_frame.h"
37 #include "zq/gui/cornerselect.h"
38 #include "zq/gui/misc_cset_sel.h"
39 #include "zq/gui/misc_color_sel.h"
40 #include "zq/gui/misc_color_row.h"
41 #include "zq/gui/dmap_minimap.h"
42 #include "zq/gui/dmap_mapgrid.h"
43 #include "zq/gui/regiongrid.h"
44 #include "zq/gui/engraving.h"
45 #endif
46
47 #include <initializer_list>
48 #include <memory>
49 #include <string>
50 #include <string_view>
51
52 // These have to be included in order after the ones above.
53 #include "gui/macros.h"
54 #include "gui/props.h"
55
56 extern int32_t zq_screen_w, zq_screen_h;
57
58 /*
59 * A brief explanation of how this works:
60 *
61 * Each property name is a global variable of a unique type. That type has
62 * an inner class template instantiated by its operator=. For instance,
63 * the property checked is an instance of checkedProp, and checked=true
64 * returns an instance of checkedProp::Value<bool>.
65 *
66 * The builder classes have a generic applyProp function that rejects any
67 * argument as invalid. ZCGUI_ACCEPT_PROP adds a specialization for that
68 * property that calls the corresponding function on the widget. Similarly,
69 * the builders have an addChildren function that rejects all children.
70 * ZCGUI_ACCEPT_ONE_CHILD and ZCGUI_ACCEPT_MULTIPLE_CHILDREN add overloads
71 * that call the appropriate functions.
72 *
73 * A builder function calls the corresponding makeX function and creates
74 * a builder class, then passes everything to the applyArgs functions.
75 * If the first argument is a property, it calls the builder's applyProp
76 * function and calls applyArgs with the remaining arguments. If it's a widget
77 * pointer, it passes all the remaining arguments to addChildren.
78 */
79
80 namespace GUI::Internal
81 {
82
83 struct DummyType {};
84 static constexpr DummyType dummy={};
85
86 // Regular widgets
87
88 inline std::shared_ptr<Button> makeButton()
89 {
90 return std::make_shared<Button>();
91 }
92
93 inline std::shared_ptr<Checkbox> makeCheckbox()
94 {
95 return std::make_shared<Checkbox>();
96 }
97
98 inline std::shared_ptr<QRCheckbox> makeQRCheckbox()
99 {
100 return std::make_shared<QRCheckbox>();
101 }
102
103 inline std::shared_ptr<DropDownList> makeDropDownList()
104 {
105 return std::make_shared<DropDownList>();
106 }
107
108 inline std::shared_ptr<Label> makeLabel()
109 {
110 return std::make_shared<Label>();
111 }
112
113 inline std::shared_ptr<List> makeList()
114 {
115 return std::make_shared<List>();
116 }
117
118 inline std::shared_ptr<TextField> makeTextField()
119 {
120 return std::make_shared<TextField>();
121 }
122
123 inline std::shared_ptr<ColorSel> makeColorSel()
124 {
125 return std::make_shared<ColorSel>();
126 }
127
128 inline std::shared_ptr<Slider> makeSlider()
129 {
130 return std::make_shared<Slider>();
131 }
132
133 inline std::shared_ptr<DitherPreview> makeDitherPreview()
134 {
135 return std::make_shared<DitherPreview>();
136 }
137
138 // Containers
139
140 inline std::shared_ptr<Frame> makeFrame()
141 {
142 return std::make_shared<Frame>();
143 }
144
145 // This is counterintuitive: Multiple rows=rows, one row=columns.
146 inline std::shared_ptr<Grid> makeColumn()
147 {
148 return Grid::rows(1);
149 }
150
151 inline std::shared_ptr<Grid> makeColumns(size_t size)
152 {
153 return Grid::columns(size);
154 }
155
156 inline std::shared_ptr<Grid> makeRow()
157 {
158 return Grid::columns(1);
159 }
160
161 inline std::shared_ptr<Grid> makeRows(size_t size)
162 {
163 return Grid::rows(size);
164 }
165
166 inline std::shared_ptr<Grid> makeRowsColumns(size_t size, size_t size2)
167 {
168 return Grid::rows_columns(size, size2);
169 }
170
171 inline std::shared_ptr<Grid> makeColumnsRows(size_t size, size_t size2)
172 {
173 return Grid::columns_rows(size, size2);
174 }
175
176 inline std::shared_ptr<ScrollingPane> makeScrollingPane()
177 {
178 return std::make_shared<ScrollingPane>();
179 }
180
181 inline std::shared_ptr<Switcher> makeSwitcher()
182 {
183 return std::make_shared<Switcher>();
184 }
185
186 inline std::shared_ptr<Menu> makeMenu()
187 {
188 return std::make_shared<Menu>();
189 }
190
191 inline std::shared_ptr<TabPanel> makeTabPanel()
192 {
193 return std::make_shared<TabPanel>();
194 }
195
196 inline std::shared_ptr<QRPanel> makeQRPanel()
197 {
198 return std::make_shared<QRPanel>();
199 }
200
201 inline std::shared_ptr<DDPanel> makeDDPanel()
202 {
203 return std::make_shared<DDPanel>();
204 }
205
206 inline std::shared_ptr<TabRef> makeTabRef()
207 {
208 return std::make_shared<TabRef>();
209 }
210
211 inline std::shared_ptr<Radio> makeRadio()
212 {
213 return std::make_shared<Radio>();
214 }
215
216 inline std::shared_ptr<RadioSet> makeRadioSet()
217 {
218 return std::make_shared<RadioSet>();
219 }
220
221 inline std::shared_ptr<DummyWidget> makeDummyWidget()
222 {
223 return std::make_shared<DummyWidget>();
224 }
225
226 #ifdef IS_EDITOR
227 inline std::shared_ptr<SelTileSwatch> makeSelTileSwatch()
228 {
229 return std::make_shared<SelTileSwatch>();
230 }
231
232 inline std::shared_ptr<SelComboSwatch> makeSelComboSwatch()
233 {
234 return std::make_shared<SelComboSwatch>();
235 }
236
237 inline std::shared_ptr<CornerSwatch> makeCornerSwatch()
238 {
239 return std::make_shared<CornerSwatch>();
240 }
241
242 inline std::shared_ptr<TileFrame> makeTileFrame()
243 {
244 return std::make_shared<TileFrame>();
245 }
246
247 inline std::shared_ptr<PaletteFrame> makePaletteFrame()
248 {
249 return std::make_shared<PaletteFrame>();
250 }
251
252 inline std::shared_ptr<MsgPreview> makeMsgPreview()
253 {
254 return std::make_shared<MsgPreview>();
255 }
256
257 inline std::shared_ptr<MiscCSetSel> makeMiscCSetSel()
258 {
259 return std::make_shared<MiscCSetSel>();
260 }
261
262 inline std::shared_ptr<MiscColorSel> makeMiscColorSel()
263 {
264 return std::make_shared<MiscColorSel>();
265 }
266
267 inline std::shared_ptr<MiscColorRow> makeMiscColorRow()
268 {
269 return std::make_shared<MiscColorRow>();
270 }
271
272 inline std::shared_ptr<DMapMinimap> makeDMapMinimap()
273 {
274 return std::make_shared<DMapMinimap>();
275 }
276
277 inline std::shared_ptr<DMapMapGrid> makeDMapMapGrid()
278 {
279 return std::make_shared<DMapMapGrid>();
280 }
281
282 inline std::shared_ptr<Engraving> makeEngraving()
283 {
284 return std::make_shared<Engraving>();
285 }
286
287 inline std::shared_ptr<RegionGrid> makeRegionGrid()
288 {
289 return std::make_shared<RegionGrid>();
290 }
291 #endif
292
293 // Top-level widgets
294
295 inline std::shared_ptr<Window> makeWindow()
296 {
297 return std::make_shared<Window>();
298 }
299
300 } // namespace GUI::Internal
301
302 namespace GUI::Builder
303 {
304
305 ZCGUI_BUILDER_START(Button)
306 ZCGUI_ACCEPT_PROP(onClick, onClick, Dialog::message)
307 ZCGUI_ACCEPT_PROP(text, setText, std::string)
308 ZCGUI_ACCEPT_PROP(onPressFunc, setOnPress, std::function<void()>)
309 ZCGUI_ACCEPT_PROP(type, setType, Button::type)
310 ZCGUI_ACCEPT_PROP(kb_ptr, setBoundKB, int*)
311 ZCGUI_ACCEPT_PROP(hotkey_ptr, setBoundHotkey, Hotkey*)
312 ZCGUI_ACCEPT_PROP(hotkey_indx, setHotkeyIndx, size_t)
313 ZCGUI_ACCEPT_PROP(icon, setIcon, int)
314
315 ZCGUI_SUGGEST_PROP(title, text)
316 ZCGUI_SUGGEST_PROP(onEnter, onClick)
317 ZCGUI_BUILDER_END()
318 ZCGUI_BUILDER_FUNCTION(Button, Button, makeButton)
319
320
321 ZCGUI_BUILDER_START(Checkbox)
322 ZCGUI_ACCEPT_PROP(checked, setChecked, bool)
323 ZCGUI_ACCEPT_PROP(text, setText, std::string)
324 ZCGUI_ACCEPT_PROP(boxPlacement, setBoxPlacement, Checkbox::boxPlacement)
325 ZCGUI_ACCEPT_PROP(onToggle, onToggle, Dialog::message)
326 ZCGUI_ACCEPT_PROP(onToggleFunc, setOnToggleFunc, std::function<void(bool)>)
327
328 ZCGUI_SUGGEST_PROP(title, text)
329 ZCGUI_BUILDER_END()
330 ZCGUI_BUILDER_FUNCTION(Checkbox, Checkbox, makeCheckbox)
331
332 ZCGUI_BUILDER_START(Radio)
333 ZCGUI_ACCEPT_PROP(checked, setChecked, bool)
334 ZCGUI_ACCEPT_PROP(text, setText, std::string)
335 ZCGUI_ACCEPT_PROP(set, setProcSet, int32_t)
336 ZCGUI_ACCEPT_PROP(indx, setIndex, size_t)
337 ZCGUI_ACCEPT_PROP(onToggle, onToggle, Dialog::message)
338
339 ZCGUI_SUGGEST_PROP(title, text)
340 ZCGUI_BUILDER_END()
341 ZCGUI_BUILDER_FUNCTION(Radio, Radio, makeRadio)
342
343
344 ZCGUI_BUILDER_START(RadioSet)
345 ZCGUI_ACCEPT_PROP(checked, setChecked, int32_t)
346 ZCGUI_ACCEPT_PROP(set, setProcSet, int32_t)
347 ZCGUI_ACCEPT_PROP(onToggle, onToggle, Dialog::message)
348
349 ZCGUI_ACCEPT_PROP(data, loadList, const ::GUI::ListData&)
350 ZCGUI_BUILDER_END()
351 ZCGUI_BUILDER_FUNCTION(RadioSet, RadioSet, makeRadioSet)
352
353
354 ZCGUI_BUILDER_START(DropDownList)
355 ZCGUI_ACCEPT_PROP(data, setListData, const ::GUI::ListData&)
356 ZCGUI_ACCEPT_PROP(selectedValue, setSelectedValue, int32_t)
357 ZCGUI_ACCEPT_PROP(onSelectionChanged, onSelectionChanged, Dialog::message)
358 ZCGUI_ACCEPT_PROP(onSelectFunc, setOnSelectFunc, std::function<void(int32_t)>)
359
360 ZCGUI_SUGGEST_PROP(onClick, onSelectionChanged)
361 ZCGUI_BUILDER_END()
362 ZCGUI_BUILDER_FUNCTION(DropDownList, DropDownList, makeDropDownList)
363
364
365 ZCGUI_BUILDER_START(Frame)
366 ZCGUI_ACCEPT_PROP(title, setTitle, std::string)
367 ZCGUI_ACCEPT_PROP(info, setInfo, std::string)
368 ZCGUI_ACCEPT_PROP(style, setStyle, GUI::Frame::style)
369 ZCGUI_ACCEPT_PROP(onInfo, onInfo, Dialog::message)
370 ZCGUI_ACCEPT_ONE_CHILD(setContent)
371
372 ZCGUI_SUGGEST_PROP(text, title)
373 ZCGUI_BUILDER_END()
374 ZCGUI_BUILDER_FUNCTION(Frame, Frame, makeFrame)
375
376
377 ZCGUI_BUILDER_START(Label)
378 ZCGUI_ACCEPT_PROP(text, setText, std::string)
379 ZCGUI_ACCEPT_PROP(maxLines, setMaxLines, std::size_t)
380 ZCGUI_ACCEPT_PROP(textAlign, setAlign, int32_t)
381 ZCGUI_ACCEPT_PROP(noHLine, setNoHLine, bool)
382
383 ZCGUI_SUGGEST_PROP(title, text)
384 ZCGUI_BUILDER_END()
385 ZCGUI_BUILDER_FUNCTION(Label, Label, makeLabel)
386
387
388 ZCGUI_BUILDER_START(List)
389 ZCGUI_ACCEPT_PROP(data, setListData, GUI::ListData)
390 ZCGUI_ACCEPT_PROP(selectedValue, setSelectedValue, int32_t)
391 ZCGUI_ACCEPT_PROP(selectedIndex, setSelectedIndex, int32_t)
392 ZCGUI_ACCEPT_PROP(onSelectionChanged, onSelectionChanged, Dialog::message)
393 ZCGUI_ACCEPT_PROP(onRClick, onRClick, Dialog::message)
394 ZCGUI_ACCEPT_PROP(onDClick, onDClick, Dialog::message)
395 ZCGUI_ACCEPT_PROP(onRClickFunc, setOnRClickFunc, std::function<void(int32_t,int32_t,int32_t)>)
396 ZCGUI_ACCEPT_PROP(onDClickFunc, setOnDClickFunc, std::function<void(int32_t,int32_t,int32_t)>)
397 ZCGUI_ACCEPT_PROP(onSelectFunc, setOnSelectFunc, std::function<void(int32_t)>)
398 ZCGUI_ACCEPT_PROP(isABC, setIsABC, bool)
399
400 ZCGUI_SUGGEST_PROP(onClick, onSelectionChanged)
401 ZCGUI_BUILDER_END()
402 ZCGUI_BUILDER_FUNCTION(List, List, makeList)
403
404
405 ZCGUI_BUILDER_START(Grid)
406 ZCGUI_ACCEPT_PROP(columnSpacing, setColumnSpacing, ::GUI::Size)
407 ZCGUI_ACCEPT_PROP(rowSpacing, setRowSpacing, ::GUI::Size)
408 ZCGUI_ACCEPT_PROP(spacing, setSpacing, ::GUI::Size)
409
410 ZCGUI_ACCEPT_MULTIPLE_CHILDREN(add)
411 ZCGUI_BUILDER_END()
412 ZCGUI_BUILDER_FUNCTION(Grid, Row, makeRow)
413 ZCGUI_BUILDER_FUNCTION_TEMPLATE(Grid, Rows, makeRows, std::size_t)
414 ZCGUI_BUILDER_FUNCTION(Grid, Column, makeColumn)
415 ZCGUI_BUILDER_FUNCTION_TEMPLATE(Grid, Columns, makeColumns, std::size_t)
416 ZCGUI_BUILDER_FUNCTION_TEMPLATE2(Grid, Rows_Columns, makeRowsColumns, std::size_t, std::size_t)
417 ZCGUI_BUILDER_FUNCTION_TEMPLATE2(Grid, Columns_Rows, makeColumnsRows, std::size_t, std::size_t)
418
419
420 ZCGUI_BUILDER_START(ScrollingPane)
421 ZCGUI_ACCEPT_PROP(ptr, setPtr, int32_t*)
422 ZCGUI_ACCEPT_PROP(targHeight, setTargHeight, ::GUI::Size)
423 ZCGUI_ACCEPT_ONE_CHILD(setContent)
424 ZCGUI_BUILDER_END()
425 ZCGUI_BUILDER_FUNCTION(ScrollingPane, ScrollingPane, makeScrollingPane)
426
427
428 ZCGUI_BUILDER_START(Switcher)
429 ZCGUI_ACCEPT_MULTIPLE_CHILDREN(add)
430 ZCGUI_BUILDER_END()
431 ZCGUI_BUILDER_FUNCTION(Switcher, Switcher, makeSwitcher)
432
433 ZCGUI_BUILDER_START(Menu)
434 ZCGUI_ACCEPT_PROP(menu, setMenu, GuiMenu*)
435 ZCGUI_BUILDER_END()
436 ZCGUI_BUILDER_FUNCTION(Menu, Menu, makeMenu)
437
438 ZCGUI_BUILDER_START(TabPanel)
439 ZCGUI_ACCEPT_PROP(indx, switchTo, size_t)
440 ZCGUI_ACCEPT_PROP(ptr, setPtr, size_t*)
441 ZCGUI_ACCEPT_PROP(onSwitch, setOnSwitch, std::function<void(size_t,size_t)>)
442 ZCGUI_ACCEPT_MULTIPLE_CHILDREN(add)
443 ZCGUI_BUILDER_END()
444 ZCGUI_BUILDER_FUNCTION(TabPanel, TabPanel, makeTabPanel)
445
446 ZCGUI_BUILDER_START(QRPanel)
447 ZCGUI_ACCEPT_PROP(onToggle, onToggle, Dialog::message)
448 ZCGUI_ACCEPT_PROP(onCloseInfo, onCloseInfo, Dialog::message)
449 ZCGUI_ACCEPT_PROP(initializer, loadQRs, byte const*)
450 ZCGUI_ACCEPT_PROP(ptr, setPtr, size_t*)
451 ZCGUI_ACCEPT_PROP(count, setCount, size_t)
452 ZCGUI_ACCEPT_PROP(showtags, setShowTags, bool)
453 ZCGUI_ACCEPT_PROP(indexed, setIndexed, bool)
454 ZCGUI_ACCEPT_PROP(scrollWidth, setScrollWidth, ::GUI::Size)
455 ZCGUI_ACCEPT_PROP(scrollHeight, setScrollHeight, ::GUI::Size)
456 ZCGUI_ACCEPT_PROP(data, loadList, const ::GUI::ListData&)
457 ZCGUI_BUILDER_END()
458 ZCGUI_BUILDER_FUNCTION(QRPanel, QRPanel, makeQRPanel)
459
460 ZCGUI_BUILDER_START(DDPanel)
461 ZCGUI_ACCEPT_PROP(onSelectionChanged, onSelectionChanged, Dialog::message)
462 ZCGUI_ACCEPT_PROP(values, linkVals, int32_t*)
463 ZCGUI_ACCEPT_PROP(count, setCount, size_t)
464 ZCGUI_ACCEPT_PROP(ddlist, loadDDList, const ::GUI::ListData&)
465 ZCGUI_ACCEPT_PROP(data, loadList, const ::GUI::ListData&)
466 ZCGUI_BUILDER_END()
467 ZCGUI_BUILDER_FUNCTION(DDPanel, DDPanel, makeDDPanel)
468
469 ZCGUI_BUILDER_START(TabRef)
470 ZCGUI_ACCEPT_PROP(name, setName, std::string)
471 ZCGUI_ACCEPT_ONE_CHILD(setContent)
472 ZCGUI_BUILDER_END()
473 ZCGUI_BUILDER_FUNCTION(TabRef, TabRef, makeTabRef)
474
475 ZCGUI_BUILDER_START(TextField)
476 ZCGUI_ACCEPT_PROP(maxLength, setMaxLength, std::size_t);
477 ZCGUI_ACCEPT_PROP(onEnter, onEnter, Dialog::message)
478 ZCGUI_ACCEPT_PROP(onValueChanged, onValueChanged, Dialog::message)
479 ZCGUI_ACCEPT_PROP(text, setText, std::string_view)
480 ZCGUI_ACCEPT_PROP(val, setVal, int32_t)
481 ZCGUI_ACCEPT_PROP(type, setType, TextField::type)
482 ZCGUI_ACCEPT_PROP(low, setLowBound, int32_t)
483 ZCGUI_ACCEPT_PROP(high, setHighBound, int32_t)
484 ZCGUI_ACCEPT_PROP(onValChangedFunc, setOnValChanged, std::function<void(TextField::type,std::string_view,int32_t)>)
485 ZCGUI_ACCEPT_PROP(places, setFixedPlaces, size_t)
486 ZCGUI_ACCEPT_PROP(swap_type, setSwapType, int32_t)
487 ZCGUI_BUILDER_END()
488 ZCGUI_BUILDER_FUNCTION(TextField, TextField, makeTextField)
489
490 ZCGUI_BUILDER_START(ColorSel)
491 ZCGUI_ACCEPT_PROP(onValueChanged, onValueChanged, Dialog::message)
492 ZCGUI_ACCEPT_PROP(val, setVal, byte)
493 ZCGUI_ACCEPT_PROP(onValChangedFunc, setOnValChanged, std::function<void(byte)>)
494 ZCGUI_BUILDER_END()
495 ZCGUI_BUILDER_FUNCTION(ColorSel, ColorSel, makeColorSel)
496
497 ZCGUI_BUILDER_START(Slider)
498 ZCGUI_ACCEPT_PROP(onValueChanged, onValueChanged, Dialog::message)
499 ZCGUI_ACCEPT_PROP(offset, setOffset, int32_t)
500 ZCGUI_ACCEPT_PROP(minOffset, setMinOffset, int32_t)
501 ZCGUI_ACCEPT_PROP(maxOffset, setMaxOffset, int32_t)
502 ZCGUI_ACCEPT_PROP(onValChangedFunc, setOnValChanged, std::function<void(int32_t)>)
503 ZCGUI_BUILDER_END()
504 ZCGUI_BUILDER_FUNCTION(Slider, Slider, makeSlider)
505
506 ZCGUI_BUILDER_START(DitherPreview)
507 ZCGUI_ACCEPT_PROP(dither_type, setDitherType, byte)
508 ZCGUI_ACCEPT_PROP(dither_arg, setDitherArg, byte)
509 ZCGUI_ACCEPT_PROP(dither_color, setDitherColor, byte)
510 ZCGUI_ACCEPT_PROP(preview_scale, setPreviewScale, byte)
511 ZCGUI_BUILDER_END()
512 ZCGUI_BUILDER_FUNCTION(DitherPreview, DitherPreview, makeDitherPreview)
513
514 ZCGUI_BUILDER_START(Window)
515 ZCGUI_ACCEPT_PROP(title, setTitle, std::string)
516 ZCGUI_ACCEPT_PROP(info, setHelp, std::string)
517 ZCGUI_ACCEPT_PROP(menu, setMenu, std::shared_ptr<Menu>)
518 ZCGUI_ACCEPT_PROP(onClose, onClose, Dialog::message)
519 ZCGUI_ACCEPT_PROP(onEnter, onEnter, Dialog::message)
520 ZCGUI_ACCEPT_PROP(use_vsync, setVSync, bool)
521 ZCGUI_ACCEPT_PROP(shortcuts, addShortcuts,
522 std::initializer_list<KeyboardShortcut>)
523 ZCGUI_ACCEPT_PROP(onTick, setOnTick, std::function<int32_t()>)
524 ZCGUI_ACCEPT_PROP(onLoad, setOnLoad, std::function<void()>)
525 ZCGUI_ACCEPT_ONE_CHILD(setContent)
526
527 ZCGUI_SUGGEST_PROP(text, title)
528 ZCGUI_BUILDER_END()
529 ZCGUI_BUILDER_FUNCTION(Window, Window, makeWindow)
530
531 ZCGUI_BUILDER_START(DummyWidget)
532 ZCGUI_BUILDER_END()
533 ZCGUI_BUILDER_FUNCTION(DummyWidget, DummyWidget, makeDummyWidget)
534
535 #ifdef IS_EDITOR
536 ZCGUI_BUILDER_START(SelTileSwatch)
537 ZCGUI_ACCEPT_PROP(tile, setTile, int32_t)
538 ZCGUI_ACCEPT_PROP(cset, setCSet, int32_t)
539 ZCGUI_ACCEPT_PROP(flip, setFlip, int32_t)
540 ZCGUI_ACCEPT_PROP(showFlip, setShowFlip, bool)
541 ZCGUI_ACCEPT_PROP(showvals, setShowVals, bool)
542 ZCGUI_ACCEPT_PROP(mini, setIsMini, bool)
543 ZCGUI_ACCEPT_PROP(showT0, setShowT0, bool)
544 ZCGUI_ACCEPT_PROP(minicorner, setMiniCrn, int32_t)
545 ZCGUI_ACCEPT_PROP(tilewid, setTileWid, int32_t)
546 ZCGUI_ACCEPT_PROP(tilehei, setTileHei, int32_t)
547 ZCGUI_ACCEPT_PROP(deftile, setDefTile, int32_t)
548 ZCGUI_ACCEPT_PROP(defcs, setDefCS, int32_t)
549 ZCGUI_ACCEPT_PROP(minionly, setMiniOnly, bool)
550 ZCGUI_ACCEPT_PROP(onSelectionChanged, onSelectionChanged, Dialog::message)
551 ZCGUI_ACCEPT_PROP(onSelectFunc, setOnSelectFunc, std::function<void(int32_t,int32_t,int32_t)>)
552 ZCGUI_BUILDER_END()
553 ZCGUI_BUILDER_FUNCTION(SelTileSwatch, SelTileSwatch, makeSelTileSwatch)
554
555 ZCGUI_BUILDER_START(SelComboSwatch)
556 ZCGUI_ACCEPT_PROP(combo, setCombo, int32_t)
557 ZCGUI_ACCEPT_PROP(cset, setCSet, int32_t)
558 ZCGUI_ACCEPT_PROP(showvals, setShowVals, bool)
559 ZCGUI_ACCEPT_PROP(onSelectionChanged, onSelectionChanged, Dialog::message)
560 ZCGUI_ACCEPT_PROP(onSelectFunc, setOnSelectFunc, std::function<void(int32_t,int32_t)>)
561 ZCGUI_BUILDER_END()
562 ZCGUI_BUILDER_FUNCTION(SelComboSwatch, SelComboSwatch, makeSelComboSwatch)
563
564 ZCGUI_BUILDER_START(CornerSwatch)
565 ZCGUI_ACCEPT_PROP(val, setVal, int32_t)
566 ZCGUI_ACCEPT_PROP(color, setColor, int32_t)
567 ZCGUI_ACCEPT_PROP(onSelectionChanged, onSelectionChanged, Dialog::message)
568 ZCGUI_ACCEPT_PROP(onSelectFunc, setOnSelectFunc, std::function<void(int32_t)>)
569 ZCGUI_BUILDER_END()
570 ZCGUI_BUILDER_FUNCTION(CornerSwatch, CornerSwatch, makeCornerSwatch)
571
572 ZCGUI_BUILDER_START(TileFrame)
573 ZCGUI_ACCEPT_PROP(tile, setTile, int32_t)
574 ZCGUI_ACCEPT_PROP(cset, setCSet, int32_t)
575 ZCGUI_ACCEPT_PROP(cset2, setCSet2, int32_t)
576 ZCGUI_ACCEPT_PROP(speed, setSpeed, int32_t)
577 ZCGUI_ACCEPT_PROP(frames, setFrames, int32_t)
578 ZCGUI_ACCEPT_PROP(delay, setDelay, int32_t)
579 ZCGUI_ACCEPT_PROP(skipx, setSkipX, int32_t)
580 ZCGUI_ACCEPT_PROP(skipy, setSkipY, int32_t)
581 ZCGUI_ACCEPT_PROP(do_sized, setDoSized, bool)
582 ZCGUI_ACCEPT_PROP(flip, setFlip, int32_t)
583 ZCGUI_ACCEPT_PROP(flashcs, setFlashCS, int32_t)
584 ZCGUI_BUILDER_END()
585 ZCGUI_BUILDER_FUNCTION(TileFrame, TileFrame, makeTileFrame)
586
587 ZCGUI_BUILDER_START(PaletteFrame)
588 ZCGUI_ACCEPT_PROP(bitmap, setBitmap, BITMAP*)
589 ZCGUI_ACCEPT_PROP(cdata, setColorData, byte*)
590 ZCGUI_ACCEPT_PROP(palette, setPal, PALETTE*)
591 ZCGUI_ACCEPT_PROP(count, setCount, uint8_t)
592 ZCGUI_ACCEPT_PROP(onUpdate, setOnUpdate, std::function<void()>)
593 ZCGUI_BUILDER_END()
594 ZCGUI_BUILDER_FUNCTION(PaletteFrame, PaletteFrame, makePaletteFrame)
595
596 ZCGUI_BUILDER_START(MsgPreview)
597 ZCGUI_ACCEPT_PROP(data, setData, MsgStr const*)
598 ZCGUI_ACCEPT_PROP(indx, setIndex, int32_t)
599 ZCGUI_ACCEPT_PROP(text, setText, std::string)
600 ZCGUI_BUILDER_END()
601 ZCGUI_BUILDER_FUNCTION(MsgPreview, MsgPreview, makeMsgPreview)
602
603 ZCGUI_BUILDER_START(MiscCSetSel)
604 ZCGUI_ACCEPT_PROP(c1, setC1, int32_t)
605 ZCGUI_ACCEPT_PROP(c2, setC2, int32_t)
606 ZCGUI_ACCEPT_PROP(onUpdate, setOnUpdate, std::function<void(int32_t,int32_t)>)
607 ZCGUI_BUILDER_END()
608 ZCGUI_BUILDER_FUNCTION(MiscCSetSel, MiscCSetSel, makeMiscCSetSel)
609
610 ZCGUI_BUILDER_START(MiscColorSel)
611 ZCGUI_ACCEPT_PROP(c1, setC1, int32_t)
612 ZCGUI_ACCEPT_PROP(c2, setC2, int32_t)
613 ZCGUI_ACCEPT_PROP(onUpdate, setOnUpdate, std::function<void(int32_t,int32_t)>)
614 ZCGUI_BUILDER_END()
615 ZCGUI_BUILDER_FUNCTION(MiscColorSel, MiscColorSel, makeMiscColorSel)
616
617 ZCGUI_BUILDER_START(MiscColorRow)
618 ZCGUI_ACCEPT_PROP(system, setSys, bool)
619 ZCGUI_ACCEPT_PROP(val, setVal, int32_t)
620 ZCGUI_ACCEPT_PROP(cset, setCS, int32_t)
621 ZCGUI_ACCEPT_PROP(onUpdate, setOnUpdate, std::function<void(int32_t)>)
622 ZCGUI_BUILDER_END()
623 ZCGUI_BUILDER_FUNCTION(MiscColorRow, MiscColorRow, makeMiscColorRow)
624
625 ZCGUI_BUILDER_START(DMapMinimap)
626 ZCGUI_ACCEPT_PROP(curMap, setCurMap, int32_t)
627 ZCGUI_ACCEPT_PROP(smallDMap, setSmallDMap, bool)
628 ZCGUI_ACCEPT_PROP(offset, setOffset, int32_t)
629 ZCGUI_BUILDER_END()
630 ZCGUI_BUILDER_FUNCTION(DMapMinimap, DMapMinimap, makeDMapMinimap)
631
632 ZCGUI_BUILDER_START(DMapMapGrid)
633 ZCGUI_ACCEPT_PROP(mapGridPtr, setMapGridPtr, byte*)
634 ZCGUI_ACCEPT_PROP(continueScreen, setContinueScreen, int32_t)
635 ZCGUI_ACCEPT_PROP(compassScreen, setCompassScreen, bool)
636 ZCGUI_ACCEPT_PROP(smallDMap, setSmallDMap, bool)
637 ZCGUI_ACCEPT_PROP(onUpdate, setOnUpdate, std::function<void(byte*, byte, byte)>)
638 ZCGUI_BUILDER_END()
639 ZCGUI_BUILDER_FUNCTION(DMapMapGrid, DMapMapGrid, makeDMapMapGrid)
640
641 ZCGUI_BUILDER_START(RegionGrid)
642 ZCGUI_ACCEPT_PROP(localRegionsData, setLocalRegionsData, regions_data*)
643 ZCGUI_ACCEPT_PROP(onUpdate, setOnUpdate, std::function<void()>)
644 ZCGUI_BUILDER_END()
645 ZCGUI_BUILDER_FUNCTION(RegionGrid, RegionGrid, makeRegionGrid)
646
647 ZCGUI_BUILDER_START(Engraving)
648 ZCGUI_ACCEPT_PROP(data, setSlot, int32_t)
649 ZCGUI_BUILDER_END()
650 ZCGUI_BUILDER_FUNCTION(Engraving, Engraving, makeEngraving)
651
652 #endif
653
654 } // namespace GUI::builder
655
656 namespace GUI::Props
657 {
658
659 // We want these in scope for setting sizes.
660 using ::GUI::operator ""_em;
661 using ::GUI::operator ""_px;
662
663 } // namespace GUI::Props
664
665 //{ Builder Shortcuts
666 #define _d DummyWidget()
667
668 //
669
670 #define INITD_ROW(ind, d_mem, lab_mem) \
671 Row(vPadding = 0_px, \
672 TextField(maxLength = 64, \
673 text = std::string(lab_mem[ind]), \
674 type = GUI::TextField::type::TEXT, \
675 width = 8_em, \
676 rightPadding = 0_px, \
677 onValChangedFunc = [&](GUI::TextField::type,std::string_view str,int32_t) \
678 { \
679 for(size_t q = 0; q < 65; ++q) \
680 { \
681 if(q < str.size()) \
682 lab_mem[ind][q] = str.at(q); \
683 else \
684 lab_mem[ind][q] = 0; \
685 } \
686 } \
687 ), \
688 TextField( \
689 type = GUI::TextField::type::SWAP_ZSINT, \
690 val = d_mem[ind], \
691 width = 6.5_em+16_px, \
692 leftPadding = 0_px, \
693 onValChangedFunc = [&](GUI::TextField::type,std::string_view,int32_t val) \
694 { \
695 d_mem[ind] = val; \
696 } \
697 ) \
698 )
699
700 #define INITD_ROW2(ind, d_mem) \
701 Row(vPadding = 0_px, \
702 Label( text = "InitD["+std::to_string(ind)+"]:", \
703 textAlign = 2, \
704 rightPadding = 0_px \
705 ), \
706 TextField( \
707 type = GUI::TextField::type::SWAP_ZSINT, \
708 val = d_mem[ind], \
709 width = 6.5_em+16_px, \
710 leftPadding = 0_px, \
711 onValChangedFunc = [&](GUI::TextField::type,std::string_view,int32_t val) \
712 { \
713 d_mem[ind] = val; \
714 } \
715 ) \
716 )
717
718 #define SCRIPT_LIST(name, list, mem) \
719 Label(minwidth = 6.5_em, text = name, textAlign = 2), \
720 DropDownList( \
721 fitParent = true, \
722 data = list, \
723 selectedValue = mem, \
724 onSelectFunc = [&](int32_t val) \
725 { \
726 mem = val; \
727 } \
728 )
729
730 #define SCRIPT_LIST_PROC(name, list, mem, proc) \
731 Label(minwidth = 6.5_em, text = name, textAlign = 2), \
732 DropDownList( \
733 fitParent = true, \
734 data = list, \
735 selectedValue = mem, \
736 onSelectFunc = [&](int32_t val) \
737 { \
738 mem = val; \
739 proc(); \
740 } \
741 )
742
743 //
744
745 #define DINFOBTN() \
746 Button(forceFitH = true, text = "?", \
747 disabled = true)
748 #define INFOBTN(inf) \
749 Button(forceFitH = true, text = "?", \
750 onClick = message::REFR_INFO, \
751 onPressFunc = [=]() \
752 { \
753 displayinfo("Info",inf); \
754 })
755 #define INFOBTN_F(inf,...) \
756 Button(forceFitH = true, text = "?", \
757 onClick = message::REFR_INFO, \
758 onPressFunc = [=]() \
759 { \
760 displayinfo("Info",fmt::format(inf,__VA_ARGS__)); \
761 })
762 #define INFOBTN_EX(inf, ...) \
763 Button(text = "?", \
764 onClick = message::REFR_INFO, \
765 __VA_ARGS__, \
766 onPressFunc = [=]() \
767 { \
768 displayinfo("Info",inf); \
769 })
770 #define INFOBTN_REF(getter) \
771 Button(forceFitH = true, text = "?", \
772 onClick = message::REFR_INFO, \
773 onPressFunc = [&]() \
774 { \
775 displayinfo("Info",getter); \
776 })
777
778 //
779
780 #define _INTBTN_PANEL_HELPER(var) \
781 Columns<4>( \
782 Checkbox( \
783 text = "A", hAlign = 0.0, \
784 checked = var&0x1, \
785 onToggleFunc = [&](bool state) \
786 { \
787 SETFLAG(var,0x1,state); \
788 }), \
789 Checkbox( \
790 text = "B", hAlign = 0.0, \
791 checked = var&0x2, \
792 onToggleFunc = [&](bool state) \
793 { \
794 SETFLAG(var,0x2,state); \
795 }), \
796 Checkbox( \
797 text = "L", hAlign = 0.0, \
798 checked = var&0x4, \
799 onToggleFunc = [&](bool state) \
800 { \
801 SETFLAG(var,0x4,state); \
802 }), \
803 Checkbox( \
804 text = "R", hAlign = 0.0, \
805 checked = var&0x8, \
806 onToggleFunc = [&](bool state) \
807 { \
808 SETFLAG(var,0x8,state); \
809 }), \
810 Checkbox( \
811 text = "Ex1", hAlign = 0.0, \
812 checked = var&0x10, \
813 onToggleFunc = [&](bool state) \
814 { \
815 SETFLAG(var,0x10,state); \
816 }), \
817 Checkbox( \
818 text = "Ex2", hAlign = 0.0, \
819 checked = var&0x20, \
820 onToggleFunc = [&](bool state) \
821 { \
822 SETFLAG(var,0x20,state); \
823 }), \
824 Checkbox( \
825 text = "Ex3", hAlign = 0.0, \
826 checked = var&0x40, \
827 onToggleFunc = [&](bool state) \
828 { \
829 SETFLAG(var,0x40,state); \
830 }), \
831 Checkbox( \
832 text = "Ex4", hAlign = 0.0, \
833 checked = var&0x80, \
834 onToggleFunc = [&](bool state) \
835 { \
836 SETFLAG(var,0x80,state); \
837 }) \
838 )
839
840 #define INTBTN_PANEL_EX(var,ltxt,inftxt,...) \
841 Column(padding = 0_px, __VA_ARGS__, \
842 Row(padding = 0_px, \
843 Label(text = ltxt), \
844 INFOBTN(inftxt) \
845 ), \
846 _INTBTN_PANEL_HELPER(var) \
847 )
848 #define INTBTN_PANEL(var,ltxt,inftxt) \
849 Column(padding = 0_px, \
850 Row(padding = 0_px, \
851 Label(text = ltxt), \
852 INFOBTN(inftxt) \
853 ), \
854 _INTBTN_PANEL_HELPER(var) \
855 )
856
857 #define INTBTN_FRAME_EX(var,ltxt,inftxt,...) \
858 Frame(title = ltxt, __VA_ARGS__, \
859 info = inftxt, \
860 _INTBTN_PANEL_HELPER(var) \
861 )
862 #define INTBTN_FRAME(var,ltxt,inftxt) \
863 Frame(title = ltxt, \
864 info = inftxt, \
865 _INTBTN_PANEL_HELPER(var) \
866 )
867
868 //
869
870 #define _INTBTN_PANEL_HELPER2(var,ltxt) \
871 Label(text = ltxt), \
872 Columns<4>( \
873 Checkbox( \
874 text = "A", hAlign = 0.0, \
875 checked = var&0x1, \
876 onToggleFunc = [&](bool state) \
877 { \
878 SETFLAG(var,0x1,state); \
879 }), \
880 Checkbox( \
881 text = "B", hAlign = 0.0, \
882 checked = var&0x2, \
883 onToggleFunc = [&](bool state) \
884 { \
885 SETFLAG(var,0x2,state); \
886 }), \
887 Checkbox( \
888 text = "L", hAlign = 0.0, \
889 checked = var&0x4, \
890 onToggleFunc = [&](bool state) \
891 { \
892 SETFLAG(var,0x4,state); \
893 }), \
894 Checkbox( \
895 text = "R", hAlign = 0.0, \
896 checked = var&0x8, \
897 onToggleFunc = [&](bool state) \
898 { \
899 SETFLAG(var,0x8,state); \
900 }), \
901 Checkbox( \
902 text = "Ex1", hAlign = 0.0, \
903 checked = var&0x10, \
904 onToggleFunc = [&](bool state) \
905 { \
906 SETFLAG(var,0x10,state); \
907 }), \
908 Checkbox( \
909 text = "Ex2", hAlign = 0.0, \
910 checked = var&0x20, \
911 onToggleFunc = [&](bool state) \
912 { \
913 SETFLAG(var,0x20,state); \
914 }), \
915 Checkbox( \
916 text = "Ex3", hAlign = 0.0, \
917 checked = var&0x40, \
918 onToggleFunc = [&](bool state) \
919 { \
920 SETFLAG(var,0x40,state); \
921 }), \
922 Checkbox( \
923 text = "Ex4", hAlign = 0.0, \
924 checked = var&0x80, \
925 onToggleFunc = [&](bool state) \
926 { \
927 SETFLAG(var,0x80,state); \
928 }) \
929 ) \
930 )
931 #define INTBTN_PANEL2_EX(var,ltxt,...) \
932 Column(padding = 0_px, __VA_ARGS__, _INTBTN_PANEL_HELPER2(var,ltxt)
933 #define INTBTN_PANEL2(var,ltxt) \
934 Column(padding = 0_px, _INTBTN_PANEL_HELPER2(var,ltxt)
935
936 //
937
938 #define _EX_RBOX hAlign = 1.0,boxPlacement = GUI::Checkbox::boxPlacement::RIGHT
939
940 //}
941
942 #endif
943